class Solution {
public:
    int findSubstringInWraproundString(string s) {
        // dp[i] 表示以i位置的元素为结尾的所有子串里面，有多少个在 base 中出现过
        int n = s.size();
        vector<int> dp(n, 1);
        vector<int> hash(26, 0);
        for(int i = 1; i < n; ++i)
        {
            if(s[i] - 1 == s[i-1] || (s[i - 1] == 'z' && s[i] == 'a'))
                dp[i] = dp[i-1] + 1;
        }
        //  计算每一个字符结尾的最⻓连续⼦数组的⻓度
        for(int i = 0; i < n; ++i)
            hash[s[i] - 'a'] = max(hash[s[i] - 'a'], dp[i]);
 
        int sum = 0;
        for(auto& e : hash)
            sum += e;
        return sum;
    }
};